home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / GAS211S2.ZIP / src / gas-211 / include / coff / rs6000.h < prev    next >
C/C++ Source or Header  |  1993-05-30  |  6KB  |  227 lines

  1. /* IBM RS/6000 "XCOFF" file definitions for BFD.
  2.    Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  3.    Written by Mimi Ph√⌠ng-Thσo V⌡ and John Gilmore.
  4.    Contributed by IBM Corporation and Cygnus Support.  */
  5.  
  6. /********************** FILE HEADER **********************/
  7.  
  8. struct external_filehdr {
  9.     char f_magic[2];    /* magic number            */
  10.     char f_nscns[2];    /* number of sections        */
  11.     char f_timdat[4];    /* time & date stamp        */
  12.     char f_symptr[4];    /* file pointer to symtab    */
  13.     char f_nsyms[4];    /* number of symtab entries    */
  14.     char f_opthdr[2];    /* sizeof(optional hdr)        */
  15.     char f_flags[2];    /* flags            */
  16. };
  17.  
  18.         /* IBM RS/6000 */
  19. #define U802WRMAGIC     0730    /* writeable text segments **chh**      */
  20. #define U802ROMAGIC     0735    /* readonly sharable text segments      */
  21. #define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
  22.  
  23. #define BADMAG(x)    \
  24.     ((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
  25.      (x).f_magic != U802TOCMAGIC)
  26.  
  27. #define    FILHDR    struct external_filehdr
  28. #define    FILHSZ    sizeof(FILHDR)
  29.  
  30.  
  31. /********************** AOUT "OPTIONAL HEADER" **********************/
  32.  
  33.  
  34. typedef struct 
  35. {
  36.   unsigned char    magic[2];    /* type of file            */
  37.   unsigned char    vstamp[2];    /* version stamp        */
  38.   unsigned char    tsize[4];    /* text size in bytes, padded to FW bdry */
  39.   unsigned char    dsize[4];    /* initialized data "  "    */
  40.   unsigned char    bsize[4];    /* uninitialized data "   "    */
  41.   unsigned char    entry[4];    /* entry pt.            */
  42.   unsigned char    text_start[4];    /* base of text used for this file */
  43.   unsigned char    data_start[4];    /* base of data used for this file */
  44.   unsigned char    o_toc[4];
  45.   unsigned char    o_snentry[2];
  46.   unsigned char    o_sntext[2];
  47.   unsigned char    o_sndata[2];
  48.   unsigned char    o_sntoc[2];
  49.   unsigned char    o_snloader[2];
  50.   unsigned char    o_snbss[2];
  51.   unsigned char    o_algntext[2];
  52.   unsigned char    o_algndata[2];
  53.   unsigned char    o_modtype[2];
  54.   unsigned char    o_resv1[2];
  55.   unsigned char    o_maxstack[4];
  56.   unsigned char    o_resv2[16];
  57. }
  58. AOUTHDR;
  59.  
  60. #define AOUTSZ (sizeof(AOUTHDR))
  61.  
  62. #define    RS6K_AOUTHDR_OMAGIC    0x0107    /* old: text & data writeable */
  63. #define    RS6K_AOUTHDR_NMAGIC    0x0108    /* new: text r/o, data r/w */
  64. #define    RS6K_AOUTHDR_ZMAGIC    0x010B    /* paged: text r/o, both page-aligned */
  65.  
  66.  
  67. /********************** SECTION HEADER **********************/
  68.  
  69.  
  70. struct external_scnhdr {
  71.     char        s_name[8];    /* section name            */
  72.     char        s_paddr[4];    /* physical address, aliased s_nlib */
  73.     char        s_vaddr[4];    /* virtual address        */
  74.     char        s_size[4];    /* section size            */
  75.     char        s_scnptr[4];    /* file ptr to raw data for section */
  76.     char        s_relptr[4];    /* file ptr to relocation    */
  77.     char        s_lnnoptr[4];    /* file ptr to line numbers    */
  78.     char        s_nreloc[2];    /* number of relocation entries    */
  79.     char        s_nlnno[2];    /* number of line number entries*/
  80.     char        s_flags[4];    /* flags            */
  81. };
  82.  
  83. /*
  84.  * names of "special" sections
  85.  */
  86. #define _TEXT    ".text"
  87. #define _DATA    ".data"
  88. #define _BSS    ".bss"
  89.  
  90.  
  91. #define    SCNHDR    struct external_scnhdr
  92. #define    SCNHSZ    sizeof(SCNHDR)
  93.  
  94.  
  95. /********************** LINE NUMBERS **********************/
  96.  
  97. /* 1 line number entry for every "breakpointable" source line in a section.
  98.  * Line numbers are grouped on a per function basis; first entry in a function
  99.  * grouping will have l_lnno = 0 and in place of physical address will be the
  100.  * symbol table index of the function name.
  101.  */
  102. struct external_lineno {
  103.     union {
  104.         char l_symndx[4];    /* function name symbol index, iff l_lnno == 0*/
  105.         char l_paddr[4];    /* (physical) address of line number    */
  106.     } l_addr;
  107.     char l_lnno[2];    /* line number        */
  108. };
  109.  
  110.  
  111. #define    LINENO    struct external_lineno
  112. #define    LINESZ    sizeof(LINENO) 
  113.  
  114.  
  115. /********************** SYMBOLS **********************/
  116.  
  117. #define E_SYMNMLEN    8    /* # characters in a symbol name    */
  118. #define E_FILNMLEN    14    /* # characters in a file name        */
  119. #define E_DIMNUM    4    /* # array dimensions in auxiliary entry */
  120.  
  121. struct external_syment 
  122. {
  123.   union {
  124.     char e_name[E_SYMNMLEN];
  125.     struct {
  126.       char e_zeroes[4];
  127.       char e_offset[4];
  128.     } e;
  129.   } e;
  130.   char e_value[4];
  131.   char e_scnum[2];
  132.   char e_type[2];
  133.   char e_sclass[1];
  134.   char e_numaux[1];
  135. };
  136.  
  137.  
  138.  
  139. #define N_BTMASK    (017)
  140. #define N_TMASK        (060)
  141. #define N_BTSHFT    (4)
  142. #define N_TSHIFT    (2)
  143.   
  144.  
  145. union external_auxent {
  146.     struct {
  147.         char x_tagndx[4];    /* str, un, or enum tag indx */
  148.         union {
  149.             struct {
  150.                 char  x_lnno[2]; /* declaration line number */
  151.                 char  x_size[2]; /* str/union/array size */
  152.             } x_lnsz;
  153.             char x_fsize[4];    /* size of function */
  154.         } x_misc;
  155.         union {
  156.             struct {        /* if ISFCN, tag, or .bb */
  157.                 char x_lnnoptr[4];    /* ptr to fcn line # */
  158.                 char x_endndx[4];    /* entry ndx past block end */
  159.             } x_fcn;
  160.             struct {        /* if ISARY, up to 4 dimen. */
  161.                 char x_dimen[E_DIMNUM][2];
  162.             } x_ary;
  163.         } x_fcnary;
  164.         char x_tvndx[2];        /* tv index */
  165.     } x_sym;
  166.  
  167.     union {
  168.         char x_fname[E_FILNMLEN];
  169.         struct {
  170.             char x_zeroes[4];
  171.             char x_offset[4];
  172.         } x_n;
  173.     } x_file;
  174.  
  175.     struct {
  176.         char x_scnlen[4];            /* section length */
  177.         char x_nreloc[2];    /* # relocation entries */
  178.         char x_nlinno[2];    /* # line numbers */
  179.     } x_scn;
  180.  
  181.         struct {
  182.         char x_tvfill[4];    /* tv fill value */
  183.         char x_tvlen[2];    /* length of .tv */
  184.         char x_tvran[2][2];    /* tv range */
  185.     } x_tv;        /* info about .tv section (in auxent of symbol .tv)) */
  186.  
  187.     struct {
  188.         unsigned char x_scnlen[4];
  189.         unsigned char x_parmhash[4];
  190.         unsigned char x_snhash[2];
  191.         unsigned char x_smtyp[1];
  192.         unsigned char x_smclas[1];
  193.         unsigned char x_stab[4];
  194.         unsigned char x_snstab[2];
  195.     } x_csect;
  196.  
  197. };
  198.  
  199. #define    SYMENT    struct external_syment
  200. #define    SYMESZ    18    
  201. #define    AUXENT    union external_auxent
  202. #define    AUXESZ    18
  203. #define DBXMASK 0x80        /* for dbx storage mask */
  204. #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
  205.  
  206.  
  207.  
  208. /********************** RELOCATION DIRECTIVES **********************/
  209.  
  210.  
  211. struct external_reloc {
  212.   char r_vaddr[4];
  213.   char r_symndx[4];
  214.   char r_size[1];
  215.   char r_type[1];
  216. };
  217.  
  218.  
  219. #define RELOC struct external_reloc
  220. #define RELSZ 10
  221.  
  222. #define DEFAULT_DATA_SECTION_ALIGNMENT 4
  223. #define DEFAULT_BSS_SECTION_ALIGNMENT 4
  224. #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
  225. /* For new sections we havn't heard of before */
  226. #define DEFAULT_SECTION_ALIGNMENT 4
  227.